package cn.ffcs.uec.organization.vo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import lombok.Getter;
import lombok.Setter;
import cn.ffcs.uec.organization.dao.OrganizationRelationVoDao;
import cn.ffcs.uec.organization.model.UecOrgDept;
import cn.ffcs.uec.organization.model.UecOrgOrgs;
import cn.ffcs.uom.common.util.ApplicationContextUtil;
import cn.ffcs.uom.common.util.StrUtil;
import cn.ffcs.uom.common.zkplus.zul.tree.node.TreeNodeEntity;

/**
 * @Title:组织关系实体
 * @Description:
 * @Copyright: FFCS（C） 2017
 * @Company: FFCS
 * @author Wang Yiren
 * @Version 0.0.1 date:2017年12月11日
 * @since JDK1.6
 */
public class OrganizationRelationVo implements Serializable, TreeNodeEntity {

	private static final long serialVersionUID = -1300651836962426802L;
	/**
	 * 层级
	 */
	@Getter
	@Setter
	private String lv;
	/**
	 * 组织编码
	 */
	@Getter
	@Setter
	private String code;
	/**
	 * 组织标识
	 */
	@Getter
	@Setter
	private String org;
	/**
	 * 关联组织标识
	 */
	@Getter
	@Setter
	private String porg;
	/**
	 * 显示顺序
	 */
	@Getter
	@Setter
	private String orgDers;
	/**
	 * 组织名称
	 */
	@Getter
	@Setter
	private String orgName;
	/**
	 * 组织类型 orgType = org; --组织 orgType = dept;--部门
	 */
	@Getter
	@Setter
	private String orgType;
	/**
	 * 组织全路径
	 */
	@Getter
	@Setter
	private String fullName;
	// /////////////////////////////////////////

	/**
	 * 树label
	 */
	@Getter
	@Setter
	private String treeLabel;
	/**
	 * 根节点
	 */
	@Getter
	@Setter
	private String rootId;

	/**
	 * 是否是根节点
	 */
	@Setter
	private Boolean isRoot = false;

	public Boolean getIsRoot() {
		return this.isRoot;
	}

	/**
	 * 构造方法
	 */
	public OrganizationRelationVo() {
		super();
	}
	/**
	 * 创建对象实例
	 */
	public static OrganizationRelationVo newInstance() {
		return new OrganizationRelationVo();
	}
	/**
	 * 获取dao
	 * 
	 * @return
	 */
	public static OrganizationRelationVoDao repository() {
		return (OrganizationRelationVoDao) ApplicationContextUtil
				.getBean("organizationRelationVoDao");
	}
	/**
	 * 获取组织
	 */
	public UecOrgOrgs getUecOrgOrgs() {
		if (null != this.org) {
			return (UecOrgOrgs) UecOrgOrgs.repository().getObject(
					UecOrgOrgs.class, this.org);
		}
		return null;
	}
	/**
	 * 获取部门
	 */
	public UecOrgDept getUecOrgDept() {
		if (null != this.org) {
			return (UecOrgDept) UecOrgDept.repository().getObject(
					UecOrgDept.class, this.org);
		}
		return null;
	}

	/**
	 * 获取父节点的查询语句写在节点的getRoot方法中
	 */
	@SuppressWarnings("unchecked")
	@Override
	public ArrayList<TreeNodeEntity> getRoot() {
		if (rootId != null) {
			StringBuilder sb = new StringBuilder(
					" SELECT * FROM   VIEW_ORGANIZATION_RELATION T WHERE T.ORG = ? ");
			List<Object> params = new ArrayList<Object>();
			params.add(this.rootId);
			List<OrganizationRelationVo> list = OrganizationRelationVo
					.repository().jdbcFindList(sb.toString(), params,
							OrganizationRelationVo.class);
			Object o = list;
			return (ArrayList<TreeNodeEntity>) o;
		}
		return null;
	}
	/**
	 * 获取子节点的查询语句写在节点的getChildren方法中
	 */
	@SuppressWarnings("unchecked")
	@Override
	public ArrayList<TreeNodeEntity> getChildren() {
		StringBuilder sb = new StringBuilder(
				" SELECT * FROM VIEW_ORGANIZATION_RELATION T WHERE T.PORG = ? ");
		List<Object> params = new ArrayList<Object>();
		params.add(this.org);
		List<OrganizationRelationVo> list = OrganizationRelationVo.repository()
				.jdbcFindList(sb.toString(), params,
						OrganizationRelationVo.class);
		Object o = list;
		return (ArrayList<TreeNodeEntity>) o;
	}

	@Override
	public String getLabel() {
		if (!StrUtil.isEmpty(this.orgName)) {
			return this.orgName;
		}
		return "";
	}

	@Override
	public boolean isGetRoot() {
		return this.isRoot;
	}
	
	/**
	 * 获取组织类型
	 * 
	 * @return
	 */
//	public List<OrgType> getOrgTypeList() {
//		if (this.orgTypeList == null || this.orgTypeList.size() <= 0) {
//			if (this.getOrgId() != null) {
//				String sql = "SELECT * FROM ORG_TYPE A WHERE A.STATUS_CD=? AND A.ORG_ID=?";
//				List params = new ArrayList();
//				params.add(BaseUnitConstants.ENTT_STATE_ACTIVE);
//				params.add(this.getOrgId());
//				orgTypeList = this.repository().jdbcFindList(sql, params,
//						OrgType.class);
//			}
//		}
//		return orgTypeList;
//	}
	
	/**
	 * 是否是单位
	 * 
	 * @return
	 */
//	public boolean isCompany() {
//		List<OrgType> list = this.getOrgTypeList();
//		if (list != null && list.size() > 0) {
//			for (OrgType orgType : list) {
//				if (!StrUtil.isEmpty(orgType.getOrgTypeCd())) {
//					if (orgType.getOrgTypeCd().startsWith(
//							OrganizationConstant.COMPANY_PRE)) {
//						return true;
//					}
//				}
//			}
//		}
//		return false;
//	}
	
}
